#include <fmt/core.h>

#include <fstream>
#include <iostream>
#include <list>
#include <memory>
#include <pugixml.hpp>
#include <string>

#include "cppguide/util/log_util.h"
#include "doctest/doctest.h"

TEST_SUITE("test_common") {
    TEST_CASE("test_common_one") {
        std::shared_ptr<spdlog::logger> log = cppguide::LogUtil::getLogger("test");
        SPDLOG_LOGGER_INFO(log, fmt::format("test_common_one"));

        pugi::xml_document doc;
        auto               result = doc.load_file("students.xml", pugi::parse_default, pugi::encoding_utf8);
        CHECK_MESSAGE(pugi::xml_parse_status::status_ok == result.status, fmt::format("文件:【{}】打开失败 ", "student.xml"));

        auto stu01 = doc.select_node("/root/students/student[@id='1002']");
        // 修改属性
        stu01.node().attribute("id").set_value("10021002");
        // 追加属性
        stu01.node().append_attribute("gender").set_value("男");
        // 修改内容
        stu01.node().child("name").first_child().set_value("李四02");

        // 添加同级节点
        // 内部追加节点可用 stu01.node().append_child("student")
        auto stu05 = stu01.node().parent().insert_child_after("student", stu01.node());
        stu05.append_attribute("id").set_value("1005");
        stu05.append_child("name").text().set("锤石");
        stu05.append_child("sex").text().set("男");

        doc.save(std::cout);
    }
}